iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0

前幾天我們看完了 Laravel 裡面 SQL Query 的轉換方式

今天我們來看 ORM,或者說 Laravel Model 怎麼轉換成 SQL Query 的。

一個典型的 Laravel Model 存取方式通常像是這樣

User::find(1);

首先我們來看看 User 這個類別,這是一個官方提供的 Laravel Model

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
use Illuminate\Database\Eloquent\Model;

class User extends Model implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}

這邊的 Illuminate\Database\Eloquent\Model 才是實際上的 Model 物件,我們看看實作

abstract class Model implements Arrayable, ArrayAccess, CanBeEscapedWhenCastToString, HasBroadcastChannel, Jsonable, JsonSerializable, QueueableEntity, Stringable, UrlRoutable
{
    use Concerns\HasAttributes,
        Concerns\HasEvents,
        Concerns\HasGlobalScopes,
        Concerns\HasRelationships,
        Concerns\HasTimestamps,
        Concerns\HasUniqueIds,
        Concerns\HidesAttributes,
        Concerns\GuardsAttributes,
        ForwardsCalls;

這邊我們可以發現,因為這段是 Laravel 資料庫串接非常核心的邏輯,有著複雜的功能,所以這邊實作了大量的介面,而不是用一個介面統整所有的功能。

另外為了讓類別內實作的功能清晰一點,這邊選擇的做法是使用許多的 trait,不是傳統建議的以合成取代繼承的方式。這件事情比較見仁見智一點,不過我個人比較喜歡 Laravel 的做法。

不過,即使這裡面有這麼多的函數,如果我們試著在裡面搜尋 find() 函數的話,是找不到對應的函數的。

這是怎麼回事呢?剩下的我們就留到明天再來聊囉!


上一篇
Day 15:\Illuminate\Database\Query\Builder get()
下一篇
Day 17:ORM 轉換
系列文
Laravel 那麼好用還需要自幹框架嗎18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
Sunny.Cat
iT邦新手 3 級 ‧ 2024-10-01 00:25:34

Laravel 的做法這樣非常彈性呢
/images/emoticon/emoticon72.gif

我要留言

立即登入留言